﻿namespace Nomo.CoreModule
{
    /// <summary>
    /// 列表池。
    /// </summary>
    /// <typeparam name="T">列表的成员的类型。</typeparam>
    public static class ListPool<T>
    {
        private static readonly ObjectPool<System.Collections.Generic.List<T>> Pool = new ObjectPool<System.Collections.Generic.List<T>>(() => new System.Collections.Generic.List<T>(), default, e => e.Clear());

        /// <summary>
        /// 从列表池里取出一个空列表。
        /// </summary>
        /// <returns>一个空列表。</returns>
        public static System.Collections.Generic.List<T> Get()
        {
            return Pool.Get();
        }

        /// <summary>
        /// 将一个列表放回列表池。
        /// </summary>
        /// <param name="list">要放回列表池的列表。</param>
        public static void Release(System.Collections.Generic.List<T> list)
        {
            if (list != null)
            {
                Pool.Release(list);
            }
        }

        /// <summary>
        /// 移除列表池中的所有列表。
        /// </summary>
        public static void Clear()
        {
            Pool.Clear();
        }
    }
}
